//package com.ruoyi.hk.hanler.redis;
//
//import com.ruoyi.hk.domain.User;
//import com.ruoyi.hk.service.DocMessageService;
//import com.ruoyi.hk.service.UserService;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.boot.CommandLineRunner;
//import org.springframework.stereotype.Component;
//
//import java.util.HashMap;
//import java.util.List;
//import java.util.Map;
//
///**
// * 缓存预热类
// * 在应用启动时预热所有缓存数据
// */
//@Component
//@Slf4j
//public class CacheWarmUpRunner implements CommandLineRunner {
//
//    @Autowired
//    private DocMessageService docMessageService;
//
//    @Autowired
//    private UserService userService;
//
//    @Override
//    public void run(String... args) throws Exception {
//        log.info("开始缓存预热...");
//
//        try {
//            // 获取所有用户
//            Map<String, Object> params = new HashMap<>();
//            params.put("status", 0); // 只获取活跃用户
//            List<User> allUsers = userService.getUserAll(params);
//
//            if (allUsers == null || allUsers.isEmpty()) {
//                log.warn("没有找到用户数据，跳过缓存预热");
//                return;
//            }
//
//            log.info("找到 {} 个用户，开始预热缓存", allUsers.size());
//
//            // 为每个用户预热缓存
//            for (User user : allUsers) {
//                Long userId = user.getUserId();
//                if (userId == null) {
//                    continue;
//                }
//
//                try {
//                    // 1. 预热用户会话缓存
//                    warmUpUserConversations(userId);
//
//                    // 2. 预热用户会话详细信息缓存
//                    warmUpUserConversationsWithUserInfo(userId);
//
//                    // 3. 预热所有其他用户缓存
//                    warmUpAllOtherUsers(userId);
//
//                    // 4. 预热聊天用户列表缓存
//                    warmUpChatUserList(userId);
//
//                    // 5. 预热聊天历史和未读消息数缓存
//                    warmUpChatHistoryAndUnreadCount(userId, allUsers);
//
//                } catch (Exception e) {
//                    log.error("用户 {} 缓存预热失败: {}", userId, e.getMessage());
//                }
//            }
//
//            log.info("缓存预热完成！");
//
//        } catch (Exception e) {
//            log.error("缓存预热过程中发生错误: {}", e.getMessage(), e);
//        }
//    }
//
//    /**
//     * 预热用户会话缓存
//     */
//    private void warmUpUserConversations(Long userId) {
//        try {
//            docMessageService.getUserConversations(userId);
//            log.debug("用户 {} 的会话缓存预热完成", userId);
//        } catch (Exception e) {
//            log.error("用户 {} 会话缓存预热失败: {}", userId, e.getMessage());
//        }
//    }
//
//    /**
//     * 预热用户会话详细信息缓存
//     */
//    private void warmUpUserConversationsWithUserInfo(Long userId) {
//        try {
//            docMessageService.getUserConversationsWithUserInfo(userId);
//            log.debug("用户 {} 的会话详细信息缓存预热完成", userId);
//        } catch (Exception e) {
//            log.error("用户 {} 会话详细信息缓存预热失败: {}", userId, e.getMessage());
//        }
//    }
//
//    /**
//     * 预热所有其他用户缓存
//     */
//    private void warmUpAllOtherUsers(Long userId) {
//        try {
//            docMessageService.getAllOtherUsers(userId);
//            log.debug("用户 {} 的其他用户列表缓存预热完成", userId);
//        } catch (Exception e) {
//            log.error("用户 {} 其他用户列表缓存预热失败: {}", userId, e.getMessage());
//        }
//    }
//
//    /**
//     * 预热聊天用户列表缓存
//     */
//    private void warmUpChatUserList(Long userId) {
//        try {
//            docMessageService.getChatUserList(userId);
//            log.debug("用户 {} 的聊天用户列表缓存预热完成", userId);
//        } catch (Exception e) {
//            log.error("用户 {} 聊天用户列表缓存预热失败: {}", userId, e.getMessage());
//        }
//    }
//
//    /**
//     * 预热聊天历史和未读消息数缓存
//     * 为用户预热与其他重要用户的聊天历史
//     */
//    private void warmUpChatHistoryAndUnreadCount(Long userId, List<User> allUsers) {
//        try {
//            // 只为前几个用户预热聊天历史，避免预热时间过长
//            int maxPrewarmUsers = Math.min(5, allUsers.size());
//
//            for (int i = 0; i < maxPrewarmUsers; i++) {
//                User targetUser = allUsers.get(i);
//                Long targetId = targetUser.getUserId();
//
//                if (targetId == null || targetId.equals(userId)) {
//                    continue;
//                }
//
//                try {
//                    // 预热聊天历史
//                    docMessageService.getChatHistory(userId, targetId);
//
//                    // 预热未读消息数
//                    docMessageService.getUnreadCount(userId, targetId);
//
//                } catch (Exception e) {
//                    log.error("用户 {} 与用户 {} 的聊天数据缓存预热失败: {}", userId, targetId, e.getMessage());
//                }
//            }
//
//            log.debug("用户 {} 的聊天历史和未读消息数缓存预热完成", userId);
//
//        } catch (Exception e) {
//            log.error("用户 {} 聊天历史缓存预热失败: {}", userId, e.getMessage());
//        }
//    }
//}
